{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 为什么要引入核函数？（10分） \n",
    "(1)实际任务中，原始样本空间中可能不存在一个超平面能将训练样本分开，需要将原始特征映射到一个更高维的特征空间，使得在这个特征空间中数据线性可分；\n",
    "（2）特征空间维数可能很高，难以直接计算特征空间中的点积；\n",
    "（3）满足一定条件的核函数，总是一定特征空间中的内积，简化了计算。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#2. 给出合页损失的数学形式并画出图形。（10分） \n",
    "import numpy as np\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x = np.linspace(start=-2, stop=3, num =1000, dtype=np.float)\n",
    "#损失函数计算\n",
    "y_hinge = 1.0 - x\n",
    "y_hinge[y_hinge < 0] = 0\n",
    "logi = np.log(1 + np.exp(-x))/math.log(2)\n",
    "#图像显示\n",
    "plt.figure(figsize=(8, 5))\n",
    "plt.plot(x, y_hinge, 'b-',mec='k', label='Hinge Loss', lw=2)\n",
    "plt.plot(x, logi, 'r-', mec='k', label='Logistic Loss', lw=2)\n",
    "plt.grid(True, ls='--')\n",
    "plt.legend(loc='upper right')\n",
    "plt.title('损失函数')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. 什么是支持向量？为什么SVM中只有一小部分的训练样本是支持向量（稀疏的）？（10分）\n",
    "（1）样本空间中，对确定决策面起直接作用的是支持向量。\n",
    "（2）SVM是从几何出发的分类器，远离决策面的样本，或说不在支持向量区域的样本点，在SVM计算中是不起作用的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. 决策树中特征分裂的准则有哪些？（10分） \n",
    " （1）ID3：信息增益最大（分裂前后熵的减少量最大）\n",
    " （2）C4.5：信息增益率最大（分裂前后熵的减少量最大，并将分裂带来的信息增加作为分裂的代价）\n",
    " （3）Gini指数\n",
    " （4）错分率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. SVM模型并没有概率解释。为了使SVM模型能输出概率，我们应该设置哪个参数？（10分） \n",
    "class sklearn.svm.SVC(probability = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000, 93)\n"
     ]
    }
   ],
   "source": [
    "#6. 采用train_test_split，从将数据集中随机抽取10000条记录，用于下述作业中模型的训练（原始数据集太大，剩余数据抛弃）。（10分） \n",
    "\n",
    "#必要模块\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "#读取数据\n",
    "train = pd.read_csv('E:\\python_study\\svm\\example\\data\\Otto_FE_train_tfidf.csv')\n",
    "\n",
    "#准备数据\n",
    "y_train = train['target']\n",
    "X_train = train.drop([\"id\", \"target\"], axis=1)\n",
    "feat_names = X_train.columns\n",
    "\n",
    "#随机抽取数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 10000, random_state = 0)\n",
    "print (X_train_part.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "7. 根据6中得到的训练数据，训练线性SVM，并对超参数（正则惩罚项、C）进行超参数调优，并分析不同C对应的训练误差和交叉验证得到的测试误差的变化趋势。（20分） "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7509\n",
      "{'C': 10, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "#网格搜索\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "#参数搜索范围\n",
    "penaltys = ['l1', 'l2']\n",
    "Cs = [0.1, 1, 10, 100, 1000]\n",
    "turned_parameters = dict(penalty=penaltys, C=Cs)\n",
    "#生成学习器实例\n",
    "SVC1 = LinearSVC(loss='squared_hinge', dual=False, multi_class='ovr', random_state=0)\n",
    "#生成GridSearchCV实例\n",
    "grid = GridSearchCV(SVC1, turned_parameters, cv=3, scoring='accuracy', n_jobs=-1, return_train_score=True)\n",
    "#调用\n",
    "grid.fit(X_train_part, y_train_part)\n",
    "#输出最佳参数\n",
    "print(grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#accuracy的变化趋势\n",
    "test_means = grid.cv_results_['mean_test_score']\n",
    "train_means = grid.cv_results_['mean_train_score']\n",
    "#变形\n",
    "n_Cs =len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_score = np.array(test_means).reshape(n_Cs, number_penaltys)\n",
    "train_score = np.array(train_means).reshape(n_Cs, number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):    \n",
    "    plt.plot(x_axis, test_score[:,1], label=penaltys[i]+'Test')\n",
    "    plt.plot(x_axis, train_score[:,1], label=penaltys[i]+'Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('accuracy')\n",
    "plt.grid(True, ls='--')\n",
    "plt.show()\n",
    "\n",
    "#为什么l1的图像显示不出来……\n",
    "\n",
    "#在正则项为l2时，随着超参数C的增大，模型在训练集上的准确率呈上升趋势；\n",
    "#在测试集上，当C为10时，模型准确率最高；而后随着C的增大，准确率逐渐降低，模型在训练集和测试集上的表现差异也逐渐扩大。\n",
    "#从图像出发，综合来看，C等于10是相对比较好的结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "8.根据6中得到的训练数据，训练RBF核SVM，并对超参数（C和gamma）进行超参数调优，并分析参数C和gamma对模型复杂度的影响，以及对训练误差和交叉验证得到的测试误差的影响。（20分） "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7805\n",
      "{'C': 10, 'gamma': 1.0}\n"
     ]
    }
   ],
   "source": [
    "#网格搜索\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "#参数搜索范围\n",
    "Cs = [0.1, 1, 10, 100, 1000]\n",
    "gammas = np.logspace(-1, 1, 3)\n",
    "turned_parameters = dict(C=Cs, gamma=gammas)\n",
    "#生成学习器实例\n",
    "SVC2 = SVC(kernel='rbf', decision_function_shape='ovr', shrinking=True, random_state=0)\n",
    "#生成GridSearchCV实例\n",
    "grid = GridSearchCV(SVC2, turned_parameters, cv=3, scoring='accuracy', n_jobs=-1, return_train_score=True)\n",
    "#调用\n",
    "grid.fit(X_train_part, y_train_part)\n",
    "#输出最佳参数\n",
    "print(grid.best_score_)\n",
    "print(grid.best_params_)\n",
    "\n",
    "#最佳参数和课件中的结果一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#accuracy的变化趋势\n",
    "test_means = grid.cv_results_['mean_test_score']\n",
    "train_means = grid.cv_results_['mean_train_score']\n",
    "#变形\n",
    "n_Cs =len(Cs)\n",
    "number_gammas = len(gammas)\n",
    "test_score = np.array(test_means).reshape(n_Cs, number_gammas)\n",
    "train_score = np.array(train_means).reshape(n_Cs, number_gammas)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):    \n",
    "    plt.plot(x_axis, test_score[:,1], label=penaltys[i]+'Test')\n",
    "    plt.plot(x_axis, train_score[:,1], label=penaltys[i]+'Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('accuracy')\n",
    "plt.grid(True, ls='--')\n",
    "plt.title('RBF核SVM')\n",
    "plt.show()\n",
    "\n",
    "#线性SVC和rbf核SVC的图有很大相似之处，但明显rbf核SVC的结果相对更加“极端”，可见超参数的选择对于核化的SVC的影响可能更大。\n",
    "\n",
    "#为什么l1的结果没有显示呢？……自己没有找到原因"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "23.861 (+12.613) for {'C': 0.1, 'gamma': 0.1}\n",
      "18.456 (+9.941) for {'C': 0.1, 'gamma': 1.0}\n",
      "53.082 (+15.666) for {'C': 0.1, 'gamma': 10.0}\n",
      "13.981 (+9.650) for {'C': 1, 'gamma': 0.1}\n",
      "13.352 (+9.379) for {'C': 1, 'gamma': 1.0}\n",
      "57.250 (+15.128) for {'C': 1, 'gamma': 10.0}\n",
      "10.018 (+8.633) for {'C': 10, 'gamma': 0.1}\n",
      "14.345 (+9.544) for {'C': 10, 'gamma': 1.0}\n",
      "59.624 (+14.252) for {'C': 10, 'gamma': 10.0}\n",
      "10.953 (+7.573) for {'C': 100, 'gamma': 0.1}\n",
      "14.813 (+9.511) for {'C': 100, 'gamma': 1.0}\n",
      "57.685 (+15.932) for {'C': 100, 'gamma': 10.0}\n",
      "16.705 (+8.829) for {'C': 1000, 'gamma': 0.1}\n",
      "17.644 (+10.258) for {'C': 1000, 'gamma': 1.0}\n",
      "57.317 (+13.440) for {'C': 1000, 'gamma': 10.0}\n"
     ]
    }
   ],
   "source": [
    "#训练时间\n",
    "fit_time = grid.cv_results_['mean_fit_time']\n",
    "score_time = grid.cv_results_['mean_score_time']\n",
    "for fit_time,score_time, params in zip(fit_time, score_time, grid.cv_results_['params']):\n",
    "        print(\"%0.3f (+%0.03f) for %r\"  % (fit_time, score_time * 2, params))\n",
    "\n",
    "#从训练时间出发大致可以看出，C或gamma的取值越大，训练时间相对更长，模型复杂度越高。\n",
    "\n",
    "#这里线性SVC和rbf核SVC的结果都没有老师给的例子好（尽管求出来的最佳参数一致），是否还是和样本量有关？"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
